let toString = Object.prototype.toString
let hasOwn = Object.prototype.hasOwnProperty;
/**
 * 判断是不是一个数组
 * @param {*} arr 
 */
export function isArray(arr) {
    if (Array.isArray(arr)) {
        return Array.isArray(arr);
    } else {
        return toString.call(arr) === '[object Array]';
    }
}

/**
 * 截取数组, 从offset开始， 默认是0
 * @param {*} arr 
 * @param {*} offset 
 */
export function slice(arr, offset = 0) {
    if (!isArray(arr)) {
        arr = Array.from(arr);
    }
    return Array.prototype.slice.call(arr, offset)
}

/**
 * 除去不要的属性
 * @param {*} props 
 * @param {*} attr
 */
export function deleteExtraProps(props, attr) {
    if (hasOwn.call(props, attr)) {
        delete props[attr];
    }
}


// 将驼峰命名法中的大写转换成 - + 该字母的小写形式  ex: fontSize => font-size
export function upperCaseToLine(str) {
    return str.replace(/([A-Z])/g, function ($) {
        let s = ''
        // 如果$不是首字母开头并且不是第一个字母(FontSizeFont这样的情况)，那么要将大写字母转换成小写字母，并且前缀要加-
        if (!str.startsWith($) && str.indexOf($) !== 0) {
            s += '-';
        }
        return s + $.toLowerCase();
    });
}


export function isType(str, expectedType) {
    return typeof str === expectedType;
}

export function isPlainObject(obj) {
    return toString.call(obj) === '[object Object]';
}

/**
 * 得到事件名
 * @param {*} str 
 */
export function transformEventStr(str) {
    return str.substring(2).toLowerCase();
}